class TablasIniciales < ActiveRecord::Migration
  def self.up
    create_table :tareas, :force => true do |t|
     t.column :nombre_tarea, :string, :limit => "100" , :null => false
     t.column :desc_tarea, :string
     t.column :fecha_inicio_tarea, :date
     t.column :fecha_fin_tarea, :date    
     t.column :fecha_fin_tarea_real, :date    
     t.column :horas_tarea, :integer    
     t.column :horas_tarea_reales, :integer    
     t.column :prioridad_id, :integer         
     t.column :proyecto_id, :integer         
    end
    
    create_table :prioridades, :force => true do |t|
     t.column :nombre_prioridad, :string, :limit => "100" , :null => false
     t.column :desc_prioridad, :string
     t.column :valor_prioridad, :int
     t.column :iniciales_prioridad, :string
    end
    
    create_table :proyectos, :force => true do |t|
      t.column :nombre_proyecto, :string, :limit => "100", :null => false
      t.column :desc_proyecto, :text, :limit => "500"
      t.column :fecha_inicio_proyecto, :date
      t.column :fecha_fin_proyecto, :date
      t.column :fecha_fin_proyecto_real, :date
      t.column :cliente_id, :int
    end
    
    create_table :clientes, :force => true do |t|
      t.column :nombre_cliente, :string, :limit => "100", :null => false
      t.column :telefono_cliente, :string, :limit => "15"
      t.column :fax_cliente, :string, :limit => "15"
      t.column :mail_cliente, :string, :limit => "200"
      t.column :web_cliente, :string, :limit => "200"
      t.column :precio_hora_cliente, :int
    end 
    
    create_table :grupo_tareas, :force => true do |t|
      t.column :nombre_grupo_tareas, :string, :limit => "100", :null => false
      t.column :desc_grupo_tareas, :string
      t.column :prioridad_id, :int
    end 
    
    create_table :tareas_presupuestos, :force => true do |t|
      t.column :tarea_id, :int, :null => false
      t.column :presupuesto_id, :int, :null => false
      t.column :grupo_tareas_id, :int
    end 
    
    create_table :presupuestos, :force => true do |t|
      t.column :nombre_presupuesto, :string, :limit => "100", :null => false
      t.column :desc_presupuesto, :string
      t.column :fecha_presupuesto, :date
      t.column :porcentaje_primer_pago, :int
      t.column :porcentaje_segundo_pago, :int
      t.column :porcentaje_tercer_pago, :int
      t.column :proyecto_id, :int
      t.column :estado_presupuesto_id, :int
    end     
    
    create_table :estado_presupuestos, :force => true do |t|
      t.column :nombre_estado_presupuesto, :string, :limit => "100", :null => false
      t.column :desc_estado_presupuesto, :text, :limit => "500"
      t.column :valor_estado_presupuesto, :int
      t.column :iniciales_estado_presupuesto, :string, :limit => "4"
    end
    
    create_table :facturas, :force => true do |t|
      t.column :nombre_factura, :string, :limit => "100", :null => false
      t.column :desc_factura, :string
      t.column :fecha_factura, :date
      t.column :fecha_pago_factura, :date
      t.column :fecha_pagada_factura, :date
      t.column :es_primer_pago, :boolean
      t.column :es_segundo_pago, :boolean
      t.column :es_tercer_pago, :boolean
      t.column :esta_pagada, :boolean
      t.column :es_a_90_dias, :boolean
      t.column :ruta_factura_fisica, :text, :limit => "500"
      t.column :presupuesto_id, :int, :null => false
    end     
    
  execute "ALTER TABLE proyectos ADD CONSTRAINT fk_proyectos_clientes FOREIGN KEY ( cliente_id ) REFERENCES clientes( id ) "
  execute "ALTER TABLE tareas ADD CONSTRAINT fk_tareas_prioridades FOREIGN KEY ( prioridad_id ) REFERENCES prioridades( id ) "
  execute "ALTER TABLE tareas ADD CONSTRAINT fk_tareas_proyectos FOREIGN KEY ( proyecto_id ) REFERENCES proyectos( id ) "
  execute "ALTER TABLE grupo_tareas ADD CONSTRAINT fk_grupo_tareas_prioridades FOREIGN KEY ( prioridad_id ) REFERENCES prioridades( id ) "
  execute "ALTER TABLE tareas_presupuestos ADD CONSTRAINT fk_tareas_presupuestos_tareas FOREIGN KEY ( tarea_id ) REFERENCES tareas( id ) "
  execute "ALTER TABLE tareas_presupuestos ADD CONSTRAINT fk_tareas_presupuestos_presupuestos FOREIGN KEY ( presupuesto_id ) REFERENCES presupuestos( id ) "
  execute "ALTER TABLE tareas_presupuestos ADD CONSTRAINT fk_tareas_presupuestos_grupo_tareas FOREIGN KEY ( grupo_tareas_id ) REFERENCES grupo_tareas( id ) "
  execute "ALTER TABLE presupuestos ADD CONSTRAINT fk_presupuestos_proyectos FOREIGN KEY ( proyecto_id ) REFERENCES proyectos( id ) "
  execute "ALTER TABLE presupuestos ADD CONSTRAINT fk_presupuestos_estado_presupuestos FOREIGN KEY ( estado_presupuesto_id ) REFERENCES estado_presupuestos( id ) "
  execute "ALTER TABLE facturas ADD CONSTRAINT fk_facturas_presupuestos FOREIGN KEY ( presupuesto_id ) REFERENCES presupuestos( id ) "
  #NOTA: fijarse como tras estas acciones el schema.rb presenta las relaciones como:
  #   add_index "clientes_usuarios", ["cliente_id"], :name => "fk_clientes_usuarios_clientes"
  #para la proxima vez ya sabemos como hacerlo desde ruby
  #¿o estoy equivocado y esto son los indices? ¿es lo mismo?...jo--- que lio llevo.
   
  end

  def self.down
    #el borrado de las siguientes tablas esta ordenado para q no den problemas
    #las claves externas
    drop_table :facturas
    drop_table :tareas_presupuestos
    drop_table :presupuestos
    drop_table :estado_presupuestos
    drop_table :tareas
    drop_table :proyectos    
    drop_table :clientes
    drop_table :grupo_tareas
    drop_table :prioridades
  end
end
